package study.java.thread06;

/**
* @Name: Student
* @Description: 学生资源类
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-9 下午4:51:26 
* @Version: V1.0
 */
public class Student02 {
	
	private boolean flag = false ; //默认为false，没有数据；设置为true，代表有数据
	private String name ;
	private int age ;
	public String getName() {
		return name;
	}
	/**
	* @Name: set
	* @Description: 数据生产方法
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-9 下午5:57:50
	* @Parameters: @param name 学生姓名数据
	* @Parameters: @param age 学生年龄数据
	* @Return: void
	 */
	public synchronized void set(String name, int age) {
		//判断是否有数据
		if(this.flag) {
			try {
				//如果有数据，线程休眠，等待消费数据
				this.wait() ;
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		//如果没有数据，生产数据
		this.name = name ;
		this.age = age ;
		//生产完数据之后
		//修改标志
		this.flag = true ;
		//唤醒线程
		this.notify() ;
	}
	
	/**
	* @Name: get
	* @Description: 数据消费方法
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-9 下午6:01:31
	* @Parameters: 无
	* @Return: void
	 */
	public synchronized void get() {
		//判断是否有数据
		if(!this.flag) {
			try {
				//没有数据，线程休眠，等待生产数据
				this.wait() ;
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		//如果有数据，消费数据
		System.out.println(this.name + ":" + this.age);
		//消费数据之后
		//修改标志
		this.flag = false ;
		//唤醒等待线程
		this.notify() ;
	}
}
